/* 定义用户路由模块的路由所对应的处理函数 */
// 导入 数据库操作 模块
const db = require('../db/index')
// 导入 bcryptjs 加密模块
const bcrypt = require('bcryptjs')
// 导入 jsonwebtoken 生成token 模块
const jwt = require('jsonwebtoken')
// 导入 config 配置文件
const config = require('../config')

// 用户注册路由所对应的处理函数
exports.register = (req, res) => {
  const userInfo = req.body
  // console.dir(userInfo)
  // 用户名或密码为空
  if (!userInfo.username || !userInfo.password)
    return res.cc('用户名或密码不能为空！')
  // 定义查询语句
  const selectUser = 'select * from blog_users where username=?'
  // 执行查询语句
  db.query(selectUser, [userInfo.username], (err, result) => {
    // 执行 SQL 语句错误
    if (err) return res.cc(err.message)
    // 用户名已存在
    if (result.length > 0) return res.cc('用户名已存在!')
    // 用户注册成功
    // 对用户的密码进行加密
    userInfo.password = bcrypt.hashSync(userInfo.password, 10)
    // 定义插入语句
    const insertUser = 'insert into blog_users set ?'
    // 执行插入语句
    db.query(
      insertUser,
      { username: userInfo.username, password: userInfo.password, email: userInfo.email },
      (err, result) => {
          console.log(result)
        // SQL语句执行错误
        if (err) return res.cc(err.message)
        // 影响条数不为1
        if (result.affectedRows !== 1)
          return res.cc('注册失败!')
        // 注册成功
        res.cc('注册成功!', 0)
      }
    )
  })
}

// 用户登录路由所对应的处理函数
exports.login = (req, res) => {
//   res.send('login ok!')
// 获取客户端传递过来的用户信息
console.log(req.body)
const userInfo = req.body
// 查找用户是否存在
// 定义 SQL 语句
const selectPwd = 'select * from blog_users where username=?'
// 执行 SQL 语句
db.query(selectPwd, userInfo.username, (err, result) => {
    // 执行语句错误
    if (err) return res.cc(err.message)
    // 用户不存在
    if (result.length < 1) return res.cc('用户不存在!')
    // 判断用户密码是否正确
    // console.log(result[0].password)
    // 使用brcypt.compareSync()方法来对用户输入的密码与加密的密码进行对比
    const compare = bcrypt.compareSync(userInfo.password, result[0].password)
    // 如果用户输入的密码和加密的密码对比结果为一样的话，bcrypt.compareSync() 会返回 true
    if (!compare) return res.cc('密码错误!')
    // 登录成功
    // 生成 token
    const token = jwt.sign({ ...result[0] }, config.jwtSecretKey, { expiresIn: config.expiresIn } )
    // console.log(token)
    // 向客户端发送token
    res.send({
        status: 0,
        data: {
            token: 'Bearer ' + token
        },
        msg: '登录成功!'
    })
})
}
